package eu.jakubiak.ioc
{
	import mx.core.IFactory;

	/**
	 * Klasa Proxy
	 * 
	 * Delegowanie tworzenia obiektów do delegata
	 * i tworzenie obiektów z użyciem IOC
	 * 
	 * Zadaniem klasy jest obudowanie fabryki obiektów
	 * w funkcjonalność dodającą wywołania IOC
	 * 
	 */
	public class IocFactory implements IFactory
	{
		/**
		 * Obiekt proxy - prawdziwa fabryka obiektów
		 */ 
		private var _delegate:IFactory;
		
		
		/**
		 * Konstruktor
		 * @param delegagte - prawdziwa fabryka
		 * @param ioc - powiązany kontener Ioc (DI)
		 */
		public function IocFactory(delegate:IFactory)
		{
			_delegate = delegate;
		}

		/**
		 * Utworzenie obiektu i dodania go do kontenera IOC alias DI
		 */
		public function newInstance():*
		{
			var newInstance:Object = _delegate.newInstance();
			Ioc.getInstance().manage(newInstance);
			return newInstance;
		}
		
	}
}